package ar.edu.unrn.lia.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.inject.Named;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import ar.edu.unrn.lia.dao.InquilinoDAO;
import ar.edu.unrn.lia.generic.GenericDaoJpaImpl;
import ar.edu.unrn.lia.model.Cuenta.Estado;
import ar.edu.unrn.lia.model.Inquilino;
import ar.edu.unrn.lia.model.Alquiler.AlquilerEstado;

@Named("inquilinoDAO")
public class InquilinoDAOImpl extends GenericDaoJpaImpl<Inquilino, Long>
		implements InquilinoDAO, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1702838622096321321L;

	public Predicate[] getSearchPredicates(Root<Inquilino> root,
			Map<String, String> filters) {

		CriteriaBuilder builder = this.entityManager.getCriteriaBuilder();
		List<Predicate> predicatesList = new ArrayList<Predicate>();
		root.alias("entity");

		String nombre = filters.get("nombre");
		if (nombre != null && !"".equals(nombre)) {
			predicatesList.add(builder.like(root.<String> get("nombre"),
					'%' + nombre + '%'));
		}

		String apellido = filters.get("apellido");
		if (apellido != null && !"".equals(apellido)) {
			predicatesList.add(builder.like(root.<String> get("apellido"),
					'%' + apellido + '%'));
		}

		String mail = filters.get("mail");
		if (mail != null && !"".equals(mail)) {
			predicatesList.add(builder.like(root.<String> get("mail"),
					'%' + mail + '%'));
		}

		String telefono = filters.get("telefono");
		if (telefono != null && !"".equals(telefono)) {
			predicatesList.add(builder.like(root.<String> get("telefono"),
					'%' + telefono + '%'));
		}
		
		String dni = filters.get("dni");
		if (dni != null && !"".equals(dni)) {
			predicatesList.add(builder.like(root.<String> get("dni"),
					'%' + dni + '%'));
		}
		
		String estado = filters.get("cuenta.estado");
		if (estado != null && !"".equals(estado)) {
			for (Estado av : Estado.values()) {
				if (av.toString().equals(estado))
				{
					predicatesList.add(builder.equal(root.get("cuenta").get("estado"),av));
				}
			}	
		}

		return predicatesList.toArray(new Predicate[predicatesList.size()]);
	}

}